跳到主要内容

Java 项目结构学习

参考资料 看完这篇,别人的开源项目结构应该能看懂了

通常的项目结构

各个目录详细介绍:

|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|__consist:存放常量定义
|__enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|__entity:放置数据库实体对象定义
|__dto:存放数据传输对象定义
|__vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|__intf:存放业务逻辑接口定义
|__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码

然后接下来 /src/main/resources 目录,里面主要存放静态配置文件和页面静态资源等东西:

|_mapper:存放mybatis的XML映射文件(如果是mybatis项目)
|_static:存放网页静态资源,比如下面的js/css/img
|__js:
|__css:
|__img:
|__font:
|__等等
|_template:存放网页模板,比如thymeleaf/freemarker模板等
|__header
|__sidebar
|__bottom
|__XXX.html等等
|_application.yml 基本配置文件
|_application-dev.yml 开发环境配置文件
|_application-test.yml 测试环境配置文件
|_application-prod.yml 生产环境配置文件

数据模型定义

参考资料 阿里 Java 开发手册

这里只介绍前后端分离的项目结构

DO(Data Object):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。

BO(Business Object):业务对象。由 Service 层输出的封装业务逻辑的对象。

AO(Application Object):应用对象。在 Web 层与 Service 层之间抽象的复用对象模型,极为贴近展示层,复用度不高。

VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。

项目结构划分总结

如果从一个用户访问一个网站的情况来看,对应着上面的项目代码结构来分析,可以贯穿整个代码分层:

对应代码目录的流转逻辑就是:

一些注意事项

1、Controller 层参数传递建议不要使用 HashMap,建议使用数据模型定义

2、Controller 层里可以做参数校验、异常抛出等操作,但建议不要放太多业务逻辑,业务逻辑尽量放到 Service 层代码中去做

3、Service 层做实际业务逻辑,可以按照功能模块做好定义和区分,相互可以调用

4、功能模块 Service 之间引用时,建议不要渗透到 DAO 层(或者 mapper 层),基于 Service 层进行调用和复用比较合理

5、业务逻辑层 Service 和数据库 DAO 层的操作对象不要混用。Controller 层的数据对象不要直接渗透到 DAO 层(或者 mapper 层);同理数据表实体对象 Entity 也不要直接传到 Controller 层进行输出或展示。

项目模板

打印项目结构的命令

# 生成目录结构的命令
tree >> D:/tree.txt # 只有文件夹
tree /f >> D:/tree.txt # 包括文件夹和文件

项目结构模板01

.
│ mvnw
│ mvnw.cmd
│ pom.xml
│ README.md

└─src
├─main
│ ├─java
│ │ └─com
│ │ └─example
│ │ └─api
│ │ │ ApiApplication.java
│ │ │
│ │ ├─config
│ │ │ │ QuartzJob.java
│ │ │ │ Swagger2.java
│ │ │ │ TaskExecutorConfig.java
│ │ │ │
│ │ │ └─websocket
│ │ │ │ WebSocketConfig.java
│ │ │ │ WebSocketHandler.java
│ │ │ │ WebSocketInterceptor.java
│ │ │ │
│ │ │ │─annotation
│ │ │ │ TokenCheck.java
│ │ │ │
│ │ │ └─handler
│ │ │ XXXXHandler.java
│ │ │
│ │ │
│ │ ├─constants
│ │ │ WeChatConstants.java
│ │ │
│ │ ├─mapper
│ │ │ WechatLoginLogMapper.java
│ │ │ WechatMsgMapper.java
│ │ │ WechatUserOpenidMapper.java
│ │ │
│ │ ├─domain
│ │ │ WechatLoginLog.java
│ │ │ WechatMsg.java
│ │ │ WechatUserOpenid.java
│ │ │
│ │ ├─service
│ │ │ │ UserSignatureService.java
│ │ │ │ WechatService.java
│ │ │ │ WxMsgService.java
│ │ │ │
│ │ │ └─impl
│ │ │ WechatServiceImpl.java
│ │ │ WxMsgServiceImpl.java
│ │ │
│ │ ├─utils
│ │ │ │ EmailUtil.java
│ │ │ │ EncryptUtil.java
│ │ │ │ StringUtil.java
│ │ │ │
│ │ │ └─wechat
│ │ │ SHA1.java
│ │ │ WXBizMsgCrypt.java
│ │ │ XMLParse.java
│ │ │
│ │ ├─vo
│ │ │ TemplateLibraryVO.java
│ │ │ TemplateMessageVO.java
│ │ │
│ │ └─controller
│ │ WechatController.java
│ │ WxMsgController.java
│ │
│ └─resources
│ │ application.properties
│ │ ehcache3.xml
│ │ logback-spring.xml
│ │
│ ├─mappers
│ │ WechatLoginLogMapper.xml
│ │ WechatMsgMapper.xml
│ │ WechatUserOpenidMapper.xml
│ │
│ ├─static
│ └─templates
└─test
└─java
└─com
└─example
└─api
ApiApplicationTests.java

项目结构模板02

|_annotation:放置项目自定义注解
|
|_aspect:放置切面代码
|
|_config:放置配置类
|
|_constant:放置常量、枚举等定义
| consist:存放常量定义
| enums:存放枚举定义
|
|
|_controller:放置控制器代码
|
|_filter:放置一些过滤、拦截相关的代码
|
|_mapper:放置数据访问层代码接口
|
|_model:放置数据模型代码
| entity:放置数据库实体对象定义
| dto:存放数据传输对象定义
| vo:存放显示层对象定义
|
|_service:放置具体的业务逻辑代码(接口和实现分离)
| intf:存放业务逻辑接口定义
| impl:存放业务逻辑实际实现
|
|_utils:放置工具类和辅助代码

项目结构模板03

│  LICENSE
│ pom.xml
│ README.md
├─src
└─main
├─java
│ └─ltd
│ └─newbee
│ └─mall
│ │ NewBeeMallAPIApplication.java
│ │
│ ├─api
│ │ │ NewBeeMallGoodsAPI.java
│ │ │ NewBeeMallGoodsCategoryAPI.java
│ │ │ NewBeeMallIndexAPI.java
│ │ │ NewBeeMallOrderAPI.java
│ │ │ NewBeeMallPersonalAPI.java
│ │ │ NewBeeMallShoppingCartAPI.java
│ │ │ NewBeeMallUserAddressAPI.java
│ │ │
│ │ ├─param
│ │ │ MallUserLoginParam.java
│ │ │ MallUserRegisterParam.java
│ │ │ MallUserUpdateParam.java
│ │ │ SaveCartItemParam.java
│ │ │ SaveMallUserAddressParam.java
│ │ │ SaveOrderParam.java
│ │ │ UpdateCartItemParam.java
│ │ │ UpdateMallUserAddressParam.java
│ │ │
│ │ └─vo
│ │ IndexInfoVO.java
│ │ NewBeeMallGoodsDetailVO.java
│ │ NewBeeMallIndexCarouselVO.java
│ │ NewBeeMallIndexCategoryVO.java
│ │ NewBeeMallIndexConfigGoodsVO.java
│ │ NewBeeMallOrderDetailVO.java
│ │ NewBeeMallOrderItemVO.java
│ │ NewBeeMallOrderListVO.java
│ │ NewBeeMallSearchGoodsVO.java
│ │ NewBeeMallShoppingCartItemVO.java
│ │ NewBeeMallUserAddressVO.java
│ │ NewBeeMallUserVO.java
│ │ SearchPageCategoryVO.java
│ │ SecondLevelCategoryVO.java
│ │ ThirdLevelCategoryVO.java
│ │
│ ├─common
│ │ Constants.java
│ │ IndexConfigTypeEnum.java
│ │ NewBeeMallCategoryLevelEnum.java
│ │ NewBeeMallException.java
│ │ NewBeeMallOrderStatusEnum.java
│ │ PayStatusEnum.java
│ │ PayTypeEnum.java
│ │ ServiceResultEnum.java
│ │
│ ├─config
│ │ │ NeeBeeMallWebMvcConfigurer.java
│ │ │ NewBeeMallExceptionHandler.java
│ │ │ Swagger2Config.java
│ │ │
│ │ ├─annotation
│ │ │ TokenToMallUser.java
│ │ │
│ │ └─handler
│ │ TokenToMallUserMethodArgumentResolver.java
│ │
│ ├─dao
│ │ CarouselMapper.java
│ │ GoodsCategoryMapper.java
│ │ IndexConfigMapper.java
│ │ MallUserAddressMapper.java
│ │ MallUserMapper.java
│ │ NewBeeMallGoodsMapper.java
│ │ NewBeeMallOrderAddressMapper.java
│ │ NewBeeMallOrderItemMapper.java
│ │ NewBeeMallOrderMapper.java
│ │ NewBeeMallShoppingCartItemMapper.java
│ │ NewBeeMallUserTokenMapper.java
│ │
│ ├─entity
│ │ Carousel.java
│ │ GoodsCategory.java
│ │ IndexConfig.java
│ │ MallUser.java
│ │ MallUserAddress.java
│ │ MallUserToken.java
│ │ NewBeeMallGoods.java
│ │ NewBeeMallOrder.java
│ │ NewBeeMallOrderAddress.java
│ │ NewBeeMallOrderItem.java
│ │ NewBeeMallShoppingCartItem.java
│ │ StockNumDTO.java
│ │
│ ├─service
│ │ │ NewBeeMallCarouselService.java
│ │ │ NewBeeMallCategoryService.java
│ │ │ NewBeeMallGoodsService.java
│ │ │ NewBeeMallIndexConfigService.java
│ │ │ NewBeeMallOrderService.java
│ │ │ NewBeeMallShoppingCartService.java
│ │ │ NewBeeMallUserAddressService.java
│ │ │ NewBeeMallUserService.java
│ │ │
│ │ └─impl
│ │ NewBeeMallCarouselServiceImpl.java
│ │ NewBeeMallCategoryServiceImpl.java
│ │ NewBeeMallGoodsServiceImpl.java
│ │ NewBeeMallIndexConfigServiceImpl.java
│ │ NewBeeMallOrderServiceImpl.java
│ │ NewBeeMallShoppingCartServiceImpl.java
│ │ NewBeeMallUserAddressServiceImpl.java
│ │ NewBeeMallUserServiceImpl.java
│ │
│ └─util
│ BeanUtil.java
│ MD5Util.java
│ NewBeeMallUtils.java
│ NumberUtil.java
│ PageQueryUtil.java
│ PageResult.java
│ Result.java
│ ResultGenerator.java
│ SystemUtil.java

└─resources
│ application.properties
│ newbee_mall_db_v2_schema.sql
│ upload.zip

└─mapper
CarouselMapper.xml
GoodsCategoryMapper.xml
IndexConfigMapper.xml
MallUserAddressMapper.xml
MallUserMapper.xml
NewBeeMallGoodsMapper.xml
NewBeeMallOrderAddressMapper.xml
NewBeeMallOrderItemMapper.xml
NewBeeMallOrderMapper.xml
NewBeeMallShoppingCartItemMapper.xml
NewBeeMallUserTokenMapper.xml